package Modelo;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Observable;

public class Planeta extends Observable{
	
	private Terreno terreno;
	
	private List <Pooglin> pooglins;	
	
	private Integer pooglinsSalvados = 0;

	private Integer pooglinsEnPlaneta=0;
	
	public Planeta(String pathTerreno){
		this.terreno = new Terreno(pathTerreno,this);	
		this.pooglins = new LinkedList<Pooglin>();
	}
	
	public Planeta(Terreno terreno){
		this.terreno=terreno;
		this.pooglins = new LinkedList<Pooglin>();

	}
	
	public Planeta (List<Pooglin> pooglins){
		this.pooglins=pooglins;
	}
	
	public int getCantidadPooglinsSalvados(){
		return this.pooglinsSalvados;
	}
	
	public void setPooglins(List<Pooglin> pooglins) {
		this.pooglins = pooglins;
	}
	
	public int getCantidadPooglinsPlaneta() {
		return Constantes.CANTIDAD_POOGLINS_PLANETA;
	}
	
	public Terreno getTerreno (){
		return this.terreno;
	}
	
	public void destruirBloque (Destruible bloque){
		
		// Aca se va a eliminar el bloque del planeta
		
		this.terreno.eliminarBloque(bloque.getPosicion());
	}
	
	public synchronized void quitarPooglinsMuertos (){
		
		// Aca se va a eliminar el pooglin del planeta		
		
		Iterator<Pooglin> iteradorLista = pooglins.iterator();

		while (iteradorLista.hasNext()){
			Pooglin pooglinExtra = (Pooglin)iteradorLista.next();
			if(pooglinExtra!=null){
				if(pooglinExtra.estaMuerto())
					iteradorLista.remove();					
			}
		}
	}
	
	public synchronized void quitarPooglinsSalvados (){
		
		// Aca se va a eliminar los pooglins salvados del planeta		
		
		Iterator<Pooglin> iteradorLista = pooglins.iterator();

		while (iteradorLista.hasNext()){
			Pooglin pooglinExtra = (Pooglin)iteradorLista.next();
			if(pooglinExtra!=null){
				if(pooglinExtra.estaSalvado())
					iteradorLista.remove();					
			}
		}
	}
	
	public synchronized void matarTodosPooglins(){
		
		// Aca se va a eliminar todos los pooglins del planeta		
		
		Iterator<Pooglin> iteradorLista = pooglins.iterator();

		while (iteradorLista.hasNext()){
			Pooglin pooglinExtra = (Pooglin)iteradorLista.next();
			if(pooglinExtra!=null){
				iteradorLista.remove();					
			}
		}			
	}
	
	public synchronized void agregarPooglin (){
		Posicion posicion = new Posicion(this.terreno.getPuertaEntrada().getPosicionX(),
				this.terreno.getPuertaEntrada().getPosicionY());
		pooglins.add(new Pooglin(posicion,terreno));
	}
	
	public List<Pooglin> getPooglins(){
		return this.pooglins;
	}
	
	public void pooglinSalvado(){
		this.pooglinsSalvados++;
	}
	
	public void setTerreno(Terreno terreno) {
		this.terreno = terreno;
	}

	public synchronized void aumentarPooglinsEnPlaneta() {
		// TODO Auto-generated method stub
		this.pooglinsEnPlaneta++;
		
	}
	
	public int getCantidadPooglinsEnPlaneta() {
		// TODO Auto-generated method stub
		return this.pooglinsEnPlaneta;
		
	}

}
